import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib as mpl
from matplotlib import rcParams


from matplotlib.font_manager import FontProperties
from matplotlib.ticker import FuncFormatter
from datetime import datetime
import numpy as np

import matplotlib.gridspec as gridspec

data=pd.read_csv('show interface brief.csv')

df = data.loc[:, ['run_time', 'BW(Mbps)']]
df.columns = ['time', 'data']

df['data']=df['data']+range(0,len(df['data']))
start_date = pd.to_datetime('2022-01-01 01:00:00')
end_date = pd.to_datetime('2022-12-31')

# date_list = pd.date_range(start_date, end_date, freq='D').strftime('%Y-%m-%d').tolist()
date_list = pd.date_range(start=start_date, periods=len(df), freq='H').strftime('%Y-%m-%d %H:%M:%S').tolist()
df['time']=date_list


# 你的原始数据
profit_value = [0.084, 0.225, 0.234, 0.264, 0.328]
time_stamp = [20221111, 20230511, 20230704, 20231212, 20240315]
time_stamp = pd.to_datetime(data.run_time[0:5], format='%Y-%m-%d %H:%M:%S')


# 将时间戳转换为datetime对象
dates = [datetime.strptime(str(ts), '%Y%m%d').date() for ts in time_stamp]
dates=time_stamp


#纵坐标生成
num=100
y = np.linspace(0,num,21)






###############################################################################
# 定义数据
x = [1, 2, 3, 4, 5, 6, 7]
y = [1, 2, 3, 4, 5, 6, 7]

##########################################################################
config = {
    "font.family": 'serif',  # 衬线字体
    "font.size": 15,  # 相当于小四大小
    "font.serif": ['SimHei'],  # 宋体
    "mathtext.fontset": 'stix',  # matplotlib渲染数学字体时使用的字体，和Times New Roman差别不大
    'axes.unicode_minus': False  # 处理负号，即-号
}
rcParams.update(config)

##########################################################################
# 新建figure
fig=plt.figure(constrained_layout=True)  # 可以调整图表大小

#Gridspec()可以跨网格位置来显示子图，通过修改add_subplot()函数来改变。
#projection--功能：子图的投影类型
# grid = plt.GridSpec(4, 4, hspace=0.5, wspace=0.2)
spec=plt.GridSpec(2,3,figure=fig)

ax1=fig.add_subplot(spec[0,0])
n, bins, patches = ax1.hist(x, y, density=1,label='A2')
ax1_2=ax1.twinx()

ax1_2.plot(x,y,label='A1') #label设置图例
ax1_2.grid(linestyle="-")# 设置网格

ax1.legend()
ax1.set(xlabel='x轴',
        ylabel='voltage',
        title='标题') # 设置横纵轴标签与图像标题
plt.show()
ax2=fig.add_subplot(spec[0,1],projection='polar')

ax3=fig.add_subplot(spec[0,2],projection='3d')
ax3.plot(x,y)
ax4=fig.add_subplot(spec[1,0:2],projection='aitoff')
ax5=fig.add_subplot(spec[1,2],projection='lambert',facecolor='yellowgreen')

fig.suptitle("GridSpec",color='r')
plt.show()


# 新增子图1
# fig.add_subplot(1, 3, (1, 2))，表示子图占据的位置为将画布三等分后的前两份位置。

ax1 = fig.add_subplot(1, 2, 1)   #子图规格是一行两列，该子图位置为第一个
ax1.plot(x, y, 'r', marker='o')
ax1.set_xlabel('日期')
ax1.set_ylabel('利润率')
ax1.set_title('area1')

# 新增子图2
ax2 = fig.add_subplot(1, 2, 2,grid[:-1, -1], xticklabels=[], yticklabels=[]) #子图规格是一行两列，该子图位置为第2个
ax2.plot(x, y, 'b', marker='o')
ax1.set_xlabel('日期')
ax1.set_ylabel('利润率')
ax2.set_title('area2')

plt.show()


plt.show()


# 设置图表标题和坐标轴标签
plt.title('利润率随日期变化趋势', fontsize=16)
plt.xlabel('日期')
plt.ylabel('利润率')
plt.xticks(fontname='Times New Roman', fontsize=14)
plt.yticks(fontname='Times New Roman', fontsize=14)



def to_percent(temp, position):
    return '%1.0f' % (1 * temp) + '%'
plt.gca().xaxis.set_major_formatter(FuncFormatter(to_percent))
# 格式化x轴日期显示
plt.gcf().autofmt_xdate()  # 自动旋转日期标记，使其垂直显示
plt.gcf
# 显示网格
plt.grid(True)
plt.grid(linestyle="-")
# 显示图表
plt.show()



plt.savefig('IPTV-program_topic.svg', format='svg',bbox_inches = 'tight', dpi=5000)
plt.show()






